//
//  SetStudy.swift
//  Swift3.0_Study
//
//  Created by chengfeng on 2016/9/27.
//  Copyright © 2016年 zhaochengfeng. All rights reserved.
//

import Cocoa

class SetStudy: NSObject {
    func start() -> Void {
        //集合(Set): 值无序不重复. 适合存储具有唯一性的数据, 如用户名/身份证号码/护照号等
        //定义: Set<元素类型>, 无法使用类型推断,但可省略类型.
        //set存储的数据类型必须一致，不可以用any
        let cardno: Set<Int> = [1,2,3]
        var citys: Set = ["北京", "上海", "广州"]
        print(cardno)
        print(citys)
        
        //①元素计数: count, 空否: isEmpty
//        citys.count
//        cardno.isEmpty

        //②插入:insert
        citys.insert("深圳")
        //移除:remove
        citys.remove("北京")
        //是否包含某元素:contains
        //转换为数组:sorted
        
        
        //集合间的运算: 交差并补
        
        var x: Set = [1, 2, 3, 4]
        let y: Set = [2, 3, 5, 6]
        
        //获取两个set的交集 结果只有【2，3】
        let z = x.intersection(y)
        print(z)
        
        //差集 subtract 从x中移除y中包含的元素，无返回值，x会改变
        x.subtract(y)
        print("x = \(x), y= \(y)")
        
        //并集 union 返回一个新的set，x,y都不会改变
        let m = x.union(y)
        print("x = \(x), y = \(y), m = \(m)")
        
        //补集 symmetricDifference 返回一个新的set，x,y都不会改变
        x = [5, 6, 1]
        let n = x.symmetricDifference(y)
        print("x = \(x), y = \(y), n = \(n)")
        
        
        //集合间的关系
        //💡相等: 两个集合有完全相同的元素.
        let h : Set = [1,2,3]
        let i : Set = [3,2,1]
        print("h == i ? \(h == i)")
        
        //子集: isSubset(可以相等), 严格子集isStrictSubset
        print("\(h.isSubset(of: i)) \(h.isStrictSubset(of: i))")
        
        //无交集: isDisjoint
        print(h.isDisjoint(with: [7,6]))
    }
}
